package co.com.inventarios.vista;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;

import co.com.inventarios.logica.CataventaLogica;
import co.com.inventarios.logica.IMngclaseLogica;
import co.com.inventarios.logica.MngclaseLogica;
import co.com.inventarios.modelo.Cataventa;
import co.com.inventarios.modelo.Mngclase;
import co.com.inventarios.modelo.MngclaseWork;
import co.com.inventarios.modelo.Vinculado;
import co.com.inventarios.utils.MessageBundleLoader;
import co.com.inventarios.utils.SessionUtil;
import co.com.inventarios.utils.SessionVars;
import co.com.inventarios.utils.Utilidades;

import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.ext.RowSelectorEvent;

public class Mngclase_MB {
	private int swestado = 0; // 0 null, 1 nuevo, 2 editando
	private HtmlCommandButton cmdelimina;
	private HtmlCommandButton cmdedita;
	private HtmlCommandButton cmdnuevo;
	private String nombreEliminar;
	private HtmlInputText txtBuscar;
	private String buscar;
	private Mngclase ClaseEdicion = new Mngclase();
	private HtmlSelectOneMenu seleconebusqueda;
	private String busbtipo;
	private MngclaseWork[] mngclasew;
	private String busquedacmbbus;
	private IMngclaseLogica Mngclase_logica;
	private List<Mngclase> listMngclase = new ArrayList<Mngclase>();
	private boolean modalRendered;
	private boolean claseselec;
	private Utilidades Utils;
	private Date fechabusca;
	private boolean busqueda1 = true;
	private boolean busqueda2 = false;
	private boolean busqueda3 = false;
	private boolean busqueda4 = false;
	private boolean busqueda5 = false;
	private int regTable;
	private String busuario = (String) SessionUtil.get(SessionVars.USER);
	private String busunombre = (String) SessionUtil.get(SessionVars.USUNOMBRE);

	public HtmlCommandButton getCmdelimina() {
		return cmdelimina;
	}

	public void setCmdelimina(HtmlCommandButton cmdelimina) {
		this.cmdelimina = cmdelimina;
	}

	public HtmlCommandButton getCmdedita() {
		return cmdedita;
	}

	public Date getFechabusca() {
		return fechabusca;
	}

	public void setFechabusca(Date fechabusca) {
		this.fechabusca = fechabusca;
	}

	public boolean isBusqueda1() {
		return busqueda1;
	}

	public void setBusqueda1(boolean busqueda1) {
		this.busqueda1 = busqueda1;
	}

	public boolean isBusqueda2() {
		return busqueda2;
	}

	public void setBusqueda2(boolean busqueda2) {
		this.busqueda2 = busqueda2;
	}

	public boolean isBusqueda3() {
		return busqueda3;
	}

	public String getBusuario() {
		return busuario;
	}

	public void setBusuario(String busuario) {
		this.busuario = busuario;
	}

	public String getBusunombre() {
		return busunombre;
	}

	public void setBusunombre(String busunombre) {
		this.busunombre = busunombre;
	}

	public void setBusqueda3(boolean busqueda3) {
		this.busqueda3 = busqueda3;
	}

	public boolean isBusqueda4() {
		return busqueda4;
	}

	public void setBusqueda4(boolean busqueda4) {
		this.busqueda4 = busqueda4;
	}

	public boolean isBusqueda5() {
		return busqueda5;
	}

	public void setBusqueda5(boolean busqueda5) {
		this.busqueda5 = busqueda5;
	}

	public boolean isClaseselec() {
		return claseselec;
	}

	public void setClaseselec(boolean claseselec) {
		this.claseselec = claseselec;
	}

	public boolean isModalRendered() {
		return modalRendered;
	}

	public int getRegTable() {
		return regTable;
	}

	public void setRegTable(int regTable) {
		this.regTable = regTable;
	}

	public Mngclase getClaseEdicion() {
		return ClaseEdicion;
	}

	public void setClaseEdicion(Mngclase claseEdicion) {
		ClaseEdicion = claseEdicion;
	}

	public void setModalRendered(boolean modalRendered) {
		this.modalRendered = modalRendered;
	}

	public void setCmdedita(HtmlCommandButton cmdedita) {
		this.cmdedita = cmdedita;
	}

	public HtmlCommandButton getCmdnuevo() {
		return cmdnuevo;
	}

	public void setCmdnuevo(HtmlCommandButton cmdnuevo) {
		this.cmdnuevo = cmdnuevo;
	}

	public String getNombreEliminar() {
		return nombreEliminar;
	}

	public void setNombreEliminar(String nombreEliminar) {
		this.nombreEliminar = nombreEliminar;
	}

	public HtmlInputText getTxtBuscar() {
		return txtBuscar;
	}

	public void setTxtBuscar(HtmlInputText txtBuscar) {
		this.txtBuscar = txtBuscar;
	}

	public String getBuscar() {
		return buscar;
	}

	public void setBuscar(String buscar) {
		this.buscar = buscar;
	}

	public HtmlSelectOneMenu getSeleconebusqueda() {
		return seleconebusqueda;
	}

	public void setSeleconebusqueda(HtmlSelectOneMenu seleconebusqueda) {
		this.seleconebusqueda = seleconebusqueda;
	}

	public String getBusbtipo() {
		return busbtipo;
	}

	public void setBusbtipo(String busbtipo) {
		this.busbtipo = busbtipo;
	}

	public void setlistListMngclase(List<Mngclase> listMngclase) {
		this.listMngclase = listMngclase;
	}

	public List<Mngclase> getlistMngclase() {
		return listMngclase;
	}

	public Utilidades getUtils() {
		return Utils;
	}

	public void setUtils(Utilidades utils) {
		Utils = utils;
	}

	public void setMngclasew(MngclaseWork[] mngclasew) {
		this.mngclasew = mngclasew;
	}

	public MngclaseWork[] getMngclasew() {
		Mngclase_logica = new MngclaseLogica();
		if (mngclasew == null) {
			try {
				if (listMngclase.size() > 0) {
					mngclasew = Mngclase_logica.findMngclaseSelectedRow(listMngclase);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return mngclasew;
	}

	public String getBusquedacmbbus() {
		return busquedacmbbus;
	}

	public void setBusquedacmbbus(String busquedacmbbus) {
		this.busquedacmbbus = busquedacmbbus;
	}

	public void rowSelectionListener(RowSelectorEvent event) {
		MngclaseWork regMngclase = null;
		MngclaseWork[] lista = getMngclasew();
		claseselec = true;
		for (int i = 0; i < getMngclasew().length; i++) {
			regMngclase = lista[i];
			if (regMngclase.isSelected()) {
				ClaseEdicion = regMngclase.getMngclasew();
				regTable = i;
			}
		}
	}

	
	public void action_Buscar(ActionEvent ae) {

		Mngclase_logica = new MngclaseLogica();
		claseselec = false;
		try {
			if (busquedacmbbus.equals("clacodigo")) {
				if (buscar.length() > 0) {
					FacesContext.getCurrentInstance().addMessage("msg",
							new FacesMessage(MessageBundleLoader.getMessage("busqueda.mensaje")+" Codigo :" + buscar));
					listMngclase.clear();
					listMngclase = Mngclase_logica.findByPropertyAll("clacodigo",
							buscar, "");
					listMngclase = getlistMngclase();
					mngclasew = null;
				} else {
					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(
									"Debe Agregar un valor de busqueda"));
				}

			} else {
				if (busquedacmbbus.equals("clanombre")) {

					FacesContext.getCurrentInstance().addMessage("msg",
							new FacesMessage(MessageBundleLoader.getMessage("busqueda.mensaje")+" Nombre :" + buscar));
					listMngclase.clear();
					listMngclase = Mngclase_logica.findByPropertyAll("clanombre",
							buscar, "");
					listMngclase = getlistMngclase();
					mngclasew = null;

				} else {

					FacesContext.getCurrentInstance().addMessage("msg",
							new FacesMessage(MessageBundleLoader.getMessage("busqueda.mensaje")+" Todos."));

					listMngclase.clear();
					listMngclase = Mngclase_logica.findAll("");
					listMngclase = getlistMngclase();
					mngclasew = null;

				}
			}
		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	public void Activapopupeliminar(ActionEvent ae) {
		modalRendered = !modalRendered;
	}

	public void action_confirmacionEliminar(ActionEvent ae) {
		if (claseselec == true) {
			if (mngclasew != null) {
				Mngclase_logica = new MngclaseLogica();
				try {
					setNombreEliminar("Clase de documento Tipo :"
							+ ClaseEdicion.getClacodigo() + " Nombre :"
							+ ClaseEdicion.getClanombre());
				} catch (Exception e) {
					e.printStackTrace();
				}
				Activapopupeliminar(ae);
			} else {
				FacesContext.getCurrentInstance().addMessage(
						"msg",
						new FacesMessage(
								"Debe seleccionar una clase de documento"));
			}
		} else {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe seleccionar una Clase de documento"));
		}
	}

	public void action_EliminarTabla(ActionEvent ae) {
		Mngclase_logica = new MngclaseLogica();
		Activapopupeliminar(ae);
		if (ClaseEdicion == null || claseselec == false) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe selecionar una clase de documento"));
		} else {
			try {
				Mngclase_logica.Eliminar_Mngclase(ClaseEdicion);
				listMngclase.remove(regTable);
				mngclasew = null;
				ClaseEdicion = null;
				claseselec = false; 
				FacesContext.getCurrentInstance().addMessage(
						"msg",
						new FacesMessage(
								"Registro eliminado Satisfactoriamente."));
			} catch (Exception e) {
				e.printStackTrace();
				FacesContext
						.getCurrentInstance()
						.addMessage(
								"msg",
								new FacesMessage(
										"No se puede eliminar el registro, tiene movimiento."));
			}

		}
	}

	// //////////////////////////
	// ////////////////////////// Unimed Propiedades // ////////////////////////
	// //////////////////////////

	private HtmlInputText txtcodigo;
	private HtmlInputText txtnombre;
	private HtmlInputText txtusunombre;
	private HtmlInputText txtusuario;
	private boolean sweditando = false;
	private boolean swnuevo = false;
	private boolean bactivo;
	private boolean modalRenderedguardar;
	private boolean modalRenderedcancelar;
	private String bcodigo;
	private String bnombre;
	private Mngclase MiMngclase;

	public HtmlInputText getTxtcodigo() {
		return txtcodigo;
	}

	public void setTxtcodigo(HtmlInputText txtcodigo) {
		this.txtcodigo = txtcodigo;
	}

	public HtmlInputText getTxtnombre() {
		return txtnombre;
	}

	public void setTxtnombre(HtmlInputText txtnombre) {
		this.txtnombre = txtnombre;
	}

	public HtmlInputText getTxtusunombre() {
		return txtusunombre;
	}

	public void setTxtusunombre(HtmlInputText txtusunombre) {
		this.txtusunombre = txtusunombre;
	}

	public HtmlInputText getTxtusuario() {
		return txtusuario;
	}

	public void setTxtusuario(HtmlInputText txtusuario) {
		this.txtusuario = txtusuario;
	}

	public boolean isSweditando() {
		return sweditando;
	}

	public void setSweditando(boolean sweditando) {
		this.sweditando = sweditando;
	}

	public boolean isSwnuevo() {
		return swnuevo;
	}

	public void setSwnuevo(boolean swnuevo) {
		this.swnuevo = swnuevo;
	}

	public boolean isBactivo() {
		return bactivo;
	}

	public String getBcodigo() {
		return bcodigo;
	}

	public void setBcodigo(String bcodigo) {
		this.bcodigo = bcodigo;
	}

	public String getBnombre() {
		return bnombre;
	}

	public void setBnombre(String bnombre) {
		this.bnombre = bnombre;
	}

	public Mngclase getMiMngclase() {
		return MiMngclase;
	}

	public void setMiMngclase(Mngclase mimngclase) {
		MiMngclase = mimngclase;
	}

	public void setBactivo(boolean bactivo) {
		this.bactivo = bactivo;
	}

	public boolean isModalRenderedguardar() {
		return modalRenderedguardar;
	}

	public void setModalRenderedguardar(boolean modalRenderedguardar) {
		this.modalRenderedguardar = modalRenderedguardar;
	}

	public boolean isModalRenderedcancelar() {
		return modalRenderedcancelar;
	}

	public void setModalRenderedcancelar(boolean modalRenderedcancelar) {
		this.modalRenderedcancelar = modalRenderedcancelar;
	}

	public int getSwestado() {
		return swestado;
	}

	public void setSwestado(int swestado) {
		this.swestado = swestado;
	}

	public String action_modificar() {
		swnuevo = false;
		sweditando = true;
		return "";
	}

	public void validaId(ActionEvent ae) {
		try {
			MiMngclase = new Mngclase();
			Utils = new Utilidades();
			bcodigo = Utils.Completar_Cadena(bcodigo," ",4);
			MiMngclase = Mngclase_logica.consultarRegMngclase(bcodigo);
			if (MiMngclase != null) {
				FacesContext.getCurrentInstance().addMessage("msg",
						new FacesMessage("Este codigo de Clase de documento ya existe"));
				bcodigo = "";
			}else{
				txtnombre.requestFocus();
			}
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}	
	}
	
	public void toggleModalguardar(ActionEvent ae) {
		Utils = new Utilidades();
		bcodigo = Utils.Completar_Cadena(bcodigo," ",4);
		try {
			MiMngclase = new Mngclase();
			MiMngclase = Mngclase_logica.consultarRegMngclase(bcodigo);
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		if (MiMngclase != null && swnuevo == true ) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Este codigo de Clase de documento ya existe"));
		} else {
			if (bcodigo.trim() == "" || bcodigo == null || bcodigo.equals("    ") ) {
				FacesContext
						.getCurrentInstance()
						.addMessage(
								"msg",
								new FacesMessage(
										"Debe agregar un Codigo para la Clase de documento"));
			} else {
				if (bnombre == "" || bnombre == null) {
					FacesContext
							.getCurrentInstance()
							.addMessage(
									"msg",
									new FacesMessage(
											"Debe agregar un Nombre para la Clase de docuemnto"));
				} else {
					modalRenderedguardar = !modalRenderedguardar;
				}
			}
		}

	}

	public void toggleModalcancelar(ActionEvent ae) {
		modalRenderedcancelar = !modalRenderedcancelar;
	}

	public String action_salir() {
		return "Mngclase_B";
	}

	// action_Cancelar
	public String action_cancelar() {
		modalRenderedcancelar = !modalRenderedcancelar;
		return "Mngclase_B";
	}

	public String action_guardar() {

		Mngclase_logica = new MngclaseLogica();
		String retornar = "";


		if (swnuevo == true) {
			MiMngclase = null;
			MiMngclase = new Mngclase();
			Utils = new Utilidades();
			bcodigo = Utils.Completar_Cadena(bcodigo," ",4);
			MiMngclase.setClacodigo(bcodigo);
			retornar = "Mngclase_B";
		} else {
			try {
				MiMngclase = ClaseEdicion;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		MiMngclase.setClanombre(bnombre);
		if (bactivo == true) {
			MiMngclase.setClaactivo(new Long(1));
		} else {
			MiMngclase.setClaactivo(new Long(0));
		}
		modalRenderedguardar = !modalRenderedguardar;
		try {
			
			menu_ppal_MB obje = (menu_ppal_MB)FacesUtils.getManagedBean("menu_ppal_MB");
			MiMngclase.setDlluser(obje.getMiDlluser());

			if (swnuevo == true) {
				MiMngclase.setClalogfec(new Timestamp(Calendar.getInstance()
						.getTimeInMillis()));
				ClaseEdicion = MiMngclase;
				Mngclase_logica.Guarda_Mngclase(MiMngclase);

			} else {
				Mngclase_logica.Modifica_Mngclase(MiMngclase);
			}
			listMngclase.clear();
			listMngclase.add(MiMngclase);
			mngclasew = null;
			//ClaseEdicion = null;
			sweditando = false;
			swnuevo = false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return retornar;
	}

	public String action_Nuevo() {
		swestado = 1;
		sweditando = true;
		swnuevo = true;
		bcodigo = null;
		bnombre = null;
		bactivo = true;
		return "Mngclase_P";
	}

	public String action_Editar() {
		String retornar = "";
		if (ClaseEdicion == null || claseselec == false) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe selecionar una Clase de documento"));
		} else {

			MiMngclase = null;
			Mngclase_logica = new MngclaseLogica();
			try {
				MiMngclase = Mngclase_logica.consultarRegMngclase(ClaseEdicion
						.getClacodigo());
				if (MiMngclase != null) {
					swestado = 2;
					sweditando = false;
					swnuevo = false;
					bcodigo = MiMngclase.getClacodigo();
					bnombre = MiMngclase.getClanombre();

					if (MiMngclase.getClaactivo().longValue() == 1) {
						bactivo = true;
					} else {
						bactivo = false;
					}
					retornar = "Mngclase_P";
				}

			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return retornar;

	}
}
